package fr.upmf.ic2a.sharedata.activity;

import java.util.ArrayList;

import fr.upmf.ic2a.sharedata.provider.ShareDataContract;
import com.example.ProjetAndroid.R;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;

public class ListContactActivity extends Activity {

	public static final Uri CONTENT_URI = Uri.parse("content://" + ShareDataContract.AUTHORITY + "/contacts");

	private ListView list;
	private EditText titreP;
	private ArrayList<String> shareDataContacts;
	private ArrayList<Integer> shareDataContactsId;
	private ArrayList<Integer> selectedContacts;
	private Uri url_system;

	public void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_list_contact);

		// Récupération de l'image
		// try {
		// Bitmap images=Images.Media.getBitmap(getContentResolver(),
		// getIntent().getData());
		// } catch (FileNotFoundException e) {
		// // TODO Auto-generated catch block
		// e.printStackTrace();
		// } catch (IOException e) {
		// // TODO Auto-generated catch block
		// e.printStackTrace();
		// }

		// Récupération de l'uri de l'image
		Intent intent = getIntent();
		Bundle extras = intent.getExtras();
		String action = intent.getAction();

		if (Intent.ACTION_SEND.equals(action)) {
			if (extras.containsKey(Intent.EXTRA_STREAM)) {
				url_system = (Uri) extras.getParcelable(Intent.EXTRA_STREAM);
			} else {
				throw new RuntimeException();
			}
		}

		// ArrayList qui va contenir les id des contacts selectionnés par
		// l'utilsateur
		selectedContacts = new ArrayList<Integer>();
		shareDataContactsId = new ArrayList<Integer>();

		// Arraylist qui va contenir les contacts du téléphone ayant
		// l'application
		shareDataContacts = new ArrayList<String>();
		Uri uri = ContactsContract.Contacts.CONTENT_URI;

		// Récuperation des contacts du téléphone
		String[] projection = new String[] { ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME };

		// Filtre par rapport aux contacts ayant l'application shareData
		String s = ContactsContract.CommonDataKinds.Im.CUSTOM_PROTOCOL + "='sharedata' AND " + ContactsContract.Data.MIMETYPE + "="
				+ ContactsContract.CommonDataKinds.Im.MIMETYPE;

		// Création de la requête
		Cursor cur = getBaseContext().getContentResolver().query(ContactsContract.Data.CONTENT_URI, projection, s, null, null);
		cur.setNotificationUri(getBaseContext().getContentResolver(), uri);

		// Ajout des contacts récupérés par la requete à l'arraylist MesContacts
		if (cur.moveToFirst()) {
			do {
				String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
				shareDataContacts.add(name);
				Integer idContact = Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)));
				shareDataContactsId.add(idContact);
			} while (cur.moveToNext());
		}

		// Création de l'adapter
		ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, shareDataContacts);

		// Récupération du ListView présent dans notre IHM
		list = (ListView) findViewById(R.id.list);

		// On passe nos données au composant ListView
		list.setAdapter(adapter);

		// Ecouteur d'evenement sur le click d'un item
		OnItemClickListener itemClickListener = new OnItemClickListener() {

			public void onItemClick(AdapterView<?> arg0, View arg1, int position, long id) {

				ListView lv = (ListView) arg0;

				if (lv.isItemChecked(position)) {
					addContactToShare(position);
				} else {
					removeContactToShare(position);
				}
			}
		};

		// Ajout de l'ecouteur à la liste
		list.setOnItemClickListener(itemClickListener);

		// Evenement click sur le bouton
		Button validateButton = (Button) findViewById(R.id.button1);
		validateButton.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				validateShare();
			}
		});
	}

	// Ajout d'un contact à la liste des utilisateurs du partage
	private void addContactToShare(int position) {
		selectedContacts.add(shareDataContactsId.get(position));
		Toast.makeText(getBaseContext(), shareDataContacts.get(position) + " ajouté au partage ", Toast.LENGTH_SHORT).show();
	}

	// Suppression d'un contact à la liste des utilisateurs du partage
	private void removeContactToShare(int position) {
		selectedContacts.remove(shareDataContactsId.get(position));
		Toast.makeText(getBaseContext(), shareDataContacts.get(position) + " retiré du partage ", Toast.LENGTH_SHORT).show();
	}

	// Validation des contacts du partage
	private void validateShare() {

		// Création du content values pour l'ajout dans la base
		ContentValues file = new ContentValues();
		file.put(ShareDataContract.File.URL_SYSTEM, url_system + "");
		file.put(ShareDataContract.File.MIME_TYPE, "image/*");

		// Ajout en base et récupération de l'id_file
		Uri uri = getContentResolver().insert(ShareDataContract.File.CONTENT_URI, file);
		String lastPathSegment = uri.getLastPathSegment();
		int idFile = -1;
		if (lastPathSegment != null) {
			try {
				idFile = Integer.parseInt(lastPathSegment);
			} catch (NumberFormatException e) {
				Log.e("ShareDataProvider", "Number Format Exception : " + e);
			}
		}

		// Création du content values pour l'ajout dans la base
		ContentValues share_sent = new ContentValues();
		
		titreP = (EditText)findViewById(R.id.editText1);
		String tP = titreP.getText().toString();
		
		share_sent.put(ShareDataContract.Sent.TITLE, tP);
		share_sent.put(ShareDataContract.Sent.ID_FILE, idFile);
		share_sent.put(ShareDataContract.Sent.SYNC_STATUS, 1);

		// Ajout en base et récupération de l'id_share
		uri = getContentResolver().insert(ShareDataContract.Sent.CONTENT_URI, share_sent);
		lastPathSegment = uri.getLastPathSegment();
		int idShare = -1;
		if (lastPathSegment != null) {
			try {
				idShare = Integer.parseInt(lastPathSegment);
			} catch (NumberFormatException e) {
				Log.e("ShareDataProvider", "Number Format Exception : " + e);
			}
		}

		// Pour chaque contact selectionner, l'ajouter dans la base
		for (int i = 0; i < selectedContacts.size(); i++) {

			// Création du content values pour l'ajout dans la base
			ContentValues contact = new ContentValues();
			contact.put(ShareDataContract.Contact.ID_CONTACT, selectedContacts.get(i));
			contact.put(ShareDataContract.Contact.ID_SENT, idShare);

			// Ajout en base et récupération de l'id_share
			getContentResolver().insert(ShareDataContract.Contact.CONTENT_URI, contact);
		}

		// Redirection vers la liste des partages envoyés
		Intent intent = new Intent(ListContactActivity.this, SendShareActivity.class);
		startActivity(intent);

	}
}
